package com.example.review.service;

import android.annotation.SuppressLint;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
import android.os.IBinder;
import android.util.Log;

import androidx.core.app.NotificationCompat;

import com.example.review.R;
import com.example.review.chapterEight2Activity;
import com.example.review.chapterTen4Activity;

import java.io.File;

/**
 * 前台服务
 */
public class ReceptionService extends Service {
    public ReceptionService() {
    }


    private ReceptionService.DownloadBinder mBinder = new ReceptionService.DownloadBinder();

    public class DownloadBinder extends Binder {
        //todo 开始下载
        public void startDownload() {
            Log.d("ReceptionService", "startDownload executed");
        }

        public int getProgress() {
            //todo 查看进度
            Log.d("ReceptionService", "getProgress executed");
            return 0;
        }
    }

    @Override
    //唯一的抽象方法 必须实现
    //这个是活动与服务的联系
    public IBinder onBind(Intent intent) {
        return mBinder;
    }


    @Override
    //服务创建的时候调 用
    public void onCreate() {
        super.onCreate();
        Log.d("ReceptionService", "onCreate: 服务");
        Intent intent = new Intent(this, chapterTen4Activity.class);
        PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);

        if(Build.VERSION.SDK_INT >= 26) {
            //当sdk版本大于26
            String id = "channel_1";
            Notification notification = new Notification.Builder(this, id)
                    .setContentTitle("前台服务")
                    // .setContentText("This is content text")
                    .setWhen(System.currentTimeMillis())
                    .setSmallIcon(R.drawable.ic_launcher_background)
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(),
                            R.drawable.ic_launcher_background))

                    //有了这个，可以点击通知，从而打开林外一个活动
                    .setContentIntent(pi)
                    //点击通知后，通知自动消失
                    .setAutoCancel(true)
                    //通知当中显示一段长文字
                     .setStyle(new Notification.BigTextStyle().bigText("111Learn how to build notifications, send and sync data, and use voice actions. Get the official Android IDE and developer tools to build apps for Android."))
                    //除了显示长文字之外，通知里还可以显示一张大图片
                    //.setStyle(new Notification.BigPictureStyle().bigPicture (BitmapFactory.decodeResource(getResources(), R.drawable.message_left)))
                    .build();
            //第一个参数是id ，要保证为每个通知所指定的id 都是不 同的。
            // 第二个参数则是Notification 对象，这里直接将我们刚刚创建好的Notification 对象传入即可。
            //manager.notify(1, notification);
            startForeground(1, notification);
        }else {

            //当sdk版本小于26
            Notification notification = new NotificationCompat.Builder(this)
                    .setContentTitle("前台服务")
                    .setContentText("This is content text")
                    .setWhen(System.currentTimeMillis())
                    .setSmallIcon(R.drawable.ic_launcher_background)
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(),
                            R.drawable.ic_launcher_background))

                    //有了这个，可以点击通知，从而打开林外一个活动
                    .setContentIntent(pi)
                    //点击通知后，通知自动消失
                    .setAutoCancel(true)
                    //可以在通知发出的时候播放一段音频，这样就能够更好地告知用户有通知到来
                    //setSound() 方法接收一个Uri 参数，所以在指定音频文件的时候还需要先获取到音频文件对应的URI
                    .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
                    //设置震动 通知到来的时候立刻振动1秒，然后静止1秒，再振动1秒
                    .setVibrate(new long[] {0, 1000, 1000, 1000 })

                    .build();
            //manager.notify(1,notification);
            startForeground(1, notification);
        }
    }

    @Override
    //在每次服务启动的时候调用
    //通常情况下，如果我们希望服务一旦启动就立刻去执行某个动作，就可以将逻辑写 在onStartCommand() 方法里
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d("ReceptionService", "onStartCommand: 服务");
        new Thread(new Runnable() {
            @Override
            public void run() {
                //todo 执行具体的耗时的逻辑
            }
        }).start();
        return super.onStartCommand(intent, flags, startId);

    }

    @Override
    //在服务销 毁的时候调用  回收 那些不再使用的资源。
    public void onDestroy() {
        super.onDestroy();
        Log.d("ReceptionService", "onDestroy: 服务");
    }
}